home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / comm2 / termsorc.lha / Extras / Source / gtlayout-source.lha / LTP_HandleHistory.c < prev    next >
C/C++ Source or Header  |  1995-09-24  |  2KB  |  94 lines

  1. /*  GadTools layout toolkit
  2. **
  3. **  Copyright © 1993-1995 by Olaf `Olsen' Barthel
  4. **  Freely distributable.
  5. */
  6.  
  7. #include "gtlayout_global.h"
  8.  
  9. VOID __regargs
  10. LTP_HandleHistory(struct SGWork *Work)
  11. {
  12.     ObjectNode *Node;
  13.  
  14.     if(GETOBJECT(Work -> Gadget,Node))
  15.     {
  16.         if(Node -> Special . String . HistoryHook)
  17.         {
  18.             struct Node    *Choice = NULL;
  19.             struct MinList    *List    = Node -> Special . String . HistoryHook -> h_Data;
  20.  
  21.             if(Work -> IEvent -> ie_Qualifier & QUALIFIER_SHIFT)
  22.             {
  23.                 if(Work -> IEvent -> ie_Code == CURSORUP)
  24.                 {
  25.                     if(List -> mlh_Head -> mln_Succ)
  26.                         Choice = (struct Node *)List -> mlh_Head;
  27.                 }
  28.                 else
  29.                 {
  30.                     if(List -> mlh_Head -> mln_Succ)
  31.                         Choice = (struct Node *)List -> mlh_TailPred;
  32.                 }
  33.             }
  34.             else
  35.             {
  36.                 struct Node *Current = Node -> Special . String . CurrentNode;
  37.  
  38.                 if(Work -> IEvent -> ie_Code == CURSORUP)
  39.                 {
  40.                     if(Current)
  41.                     {
  42.                         if(Current -> ln_Pred -> ln_Pred)
  43.                             Choice = Current -> ln_Pred;
  44.                         else
  45.                             Choice = Current;
  46.                     }
  47.                     else
  48.                     {
  49.                         if(List -> mlh_Head -> mln_Succ)
  50.                             Choice = (struct Node *)List -> mlh_TailPred;
  51.                     }
  52.                 }
  53.                 else
  54.                 {
  55.                     if(Current)
  56.                     {
  57.                         if(Current -> ln_Succ -> ln_Succ)
  58.                             Choice = Current -> ln_Succ;
  59.                     }
  60.                 }
  61.             }
  62.  
  63.             if(Choice != Node -> Special . String . CurrentNode)
  64.             {
  65.                 if(Choice)
  66.                 {
  67.                     strcpy(Work -> WorkBuffer,Choice -> ln_Name);
  68.  
  69.                     Work -> NumChars = Work -> BufferPos = strlen(Work -> WorkBuffer);
  70.                 }
  71.                 else
  72.                 {
  73.                     Work -> WorkBuffer[0]    = 0;
  74.                     Work -> NumChars    = 0;
  75.                     Work -> BufferPos    = 0;
  76.                 }
  77.  
  78.                 if(Node -> Type == INTEGER_KIND)
  79.                 {
  80. #ifdef DO_HEXHOOK
  81.                     LTP_ConvertNum((Node -> Min < 0),Work -> WorkBuffer,&Work -> LongInt);
  82. #else
  83.                     Work -> LongInt = LTP_Atol(Work -> WorkBuffer);
  84. #endif
  85.                 }
  86.  
  87.                 Node -> Special . String . CurrentNode = Choice;
  88.  
  89.                 Work -> Actions = (Work -> Actions & ~SGA_BEEP) | SGA_USE | SGA_REDISPLAY;
  90.             }
  91.         }
  92.     }
  93. }
  94.